package ar.com.larreta.colegio.client.alumnos;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import ar.com.larreta.colegio.intercambio.client.Alumno;
import ar.com.larreta.colegio.intercambio.client.Obligacion;
import ar.com.larreta.colegio.intercambio.client.Pago;
import ar.com.larreta.controlador.client.Invocador;
import ar.com.larreta.grilla.client.Grilla;
import ar.com.larreta.grilla.client.NumberCellRenderer;
import ar.com.larreta.grilla.client.SectorConGrilla;
import ar.com.larreta.intercambio.client.Respuesta;
import ar.com.larreta.vista.client.DialogInfo;
import ar.com.larreta.vista.client.Mensajes;
import ar.com.larreta.vista.client.RetornoDeLlamadaConVentana;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.google.gwt.i18n.client.DateTimeFormat;

public class SectorObligaciones extends SectorConGrilla {

	private static final String LISTA = "listaObligaciones";
	
	public static final Integer ANCHO = 315;
	public static final Integer LARGO_DATOS = 320;
	public static final Integer LARGO_GRILLA = LARGO_DATOS - 55;
	
	private MenuItem pagar;
	private Alumno alumno;
	
	public void setAlumno(Alumno alumno) {
		this.alumno = alumno;
	}

	public SectorObligaciones() {
		setHeading(Mensajes.getInstancia().get("msg.colegio.obligaciones"));
		
		grilla = new Grilla(null, getConfiguracionColumnas(), LISTA);
		add(grilla);
		
		setSize((ANCHO) - 15 , LARGO_DATOS);
		
		grilla.setSize((ANCHO) - 40 , LARGO_GRILLA);
		grilla.setTamanioPagina(11);

		add(grilla.getToolBar());
		
		grilla.setContextMenu(new Menu());
		pagar = new MenuItem(Mensajes.getInstancia().get("msg.colegio.pagar"), new SelectionListener<MenuEvent>() {
			@Override
			public void componentSelected(MenuEvent ce) {
				if ((getGrilla().getSelectionModel().getSelectedItems()!=null) &&
						(getGrilla().getSelectionModel().getSelectedItems().size()>0)){
					
					Obligacion obligacion = (Obligacion) grilla.getSelectionModel().getSelectedItems().iterator().next();
					Pago pago = new Pago();
					pago.setResponsable(alumno.getResponsable());
					pago.setProducto(obligacion);
					pago.setAlumno(alumno);
					
					Invocador.invocar(pago, new RetornoDeLlamadaConVentana() {

						@Override
						public void procesado(Map<Object, Respuesta> respuestas) {
							
						}
						
					});
					
				} else {
					DialogInfo.mostrar("Omitio Seleccion", "Debe seleccionar una obligacion a pagar.");
				}				
			}
		});
		grilla.getContextMenu().add(pagar);
		
		grilla.getSelectionModel().addListener(Events.SelectionChange,
				new Listener() {
					public void handleEvent(BaseEvent be) {
						List seleccionados = grilla.getSelectionModel().getSelection();
						if (pagar!=null){
							pagar.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty())));
						}
					}
				});
	}
	

	@Override
	public ColumnModel getConfiguracionColumnas() {
		ColumnConfig columnNombre = new ColumnConfig("nombre", Mensajes.getInstancia().get("msg.colegio.obligaciones.nombre"), 150);
		ColumnConfig columnValor = new ColumnConfig("valor", Mensajes.getInstancia().get("msg.colegio.obligaciones.valor"), 50);
		columnValor.setAlignment(HorizontalAlignment.RIGHT);
		columnValor.setRenderer(new NumberCellRenderer("0.00"));
		ColumnConfig columnVencimiento = new ColumnConfig("vencimiento", Mensajes.getInstancia().get("msg.colegio.obligaciones.vencimiento"), 70);
		columnVencimiento.setDateTimeFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
		columnVencimiento.setAlignment(HorizontalAlignment.CENTER);
		
		ArrayList<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>();
		columnConfigs.add(columnNombre);
		columnConfigs.add(columnValor);
		columnConfigs.add(columnVencimiento);
		
		return new ColumnModel(columnConfigs);
	}

	@Override
	public String getNombreLista() {
		return LISTA;
	}


	@Override
	public void botonAgregarSeleccionado() {
	}

}
